package main

import (
	"log"
	"stacks/config"
	"stacks/database"
	"stacks/middleware"
	"stacks/routers"

	_ "stacks/docs" // 导入生成的swagger文档

	"github.com/gin-gonic/gin"
)

// @title Stacks RBAC权限管理系统 API
// @version 1.0
// @description 基于 Go + Gin + Gorm 的RBAC权限管理系统，支持多租户隔离
// @termsOfService http://swagger.io/terms/

// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io

// @license.name MIT
// @license.url https://opensource.org/licenses/MIT

// @host localhost:8080
// @BasePath /api

// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name Authorization
// @description JWT认证，格式: Bearer {token}

func main() {
	// 加载配置
	cfg, err := config.LoadConfig()
	if err != nil {
		log.Fatalf("配置加载失败: %v", err)
	}

	// 初始化数据库
	if err := database.InitDB(cfg); err != nil {
		log.Fatalf("数据库初始化失败: %v", err)
	}

	// 执行数据库迁移
	if err := database.Migrate(); err != nil {
		log.Fatalf("数据库迁移失败: %v", err)
	}

	// 初始化Redis
	if err := database.InitRedis(cfg); err != nil {
		log.Printf("Redis初始化失败: %v", err)
	}

	// 设置Gin模式
	gin.SetMode(cfg.Server.Mode)

	// 创建Gin实例
	r := gin.Default()

	// 注册中间件
	r.Use(middleware.CORS())
	r.Use(middleware.Logger())
	r.Use(middleware.ExceptionHandler()) // 全局异常处理
	r.Use(middleware.AuditMiddleware())

	// 注册路由
	routers.RegisterRoutes(r, cfg)

	// 注册Swagger路由
	routers.RegisterSwaggerRoutes(r)

	// 启动服务器
	log.Printf("服务器启动在端口 %s", cfg.Server.Port)
	if err := r.Run(":" + cfg.Server.Port); err != nil {
		log.Fatalf("服务器启动失败: %v", err)
	}
}
